let helperUtils = require("slib/baogeUtils")
let baogeUtils = require("./baogeUtils");
// 首页
const homePage = _ => {
    // let textView = helperUtils.getNode(desc('直播').id('com.smile.gifmaker:id/textView'))
    let leftBtn = helperUtils.getNode(id('com.smile.gifmaker:id/left_btn'))
    let selectionNode = helperUtils.getNode(text('首页').id('android:id/text1'))
    return !!(leftBtn && selectionNode);
}

// 精选页面
const selectionPage = _ => {
    // let searchViewNode = helperUtils.getNode(id('com.smile.gifmaker:id/nasa_featured_default_search_view')) // 真机上
    // let searchViewNode = helperUtils.getNode(id('com.smile.gifmaker:id/featured_search_icon_anim_iv')) // 模拟器上
    // let leftHamburgerNode = helperUtils.getNode(id('com.smile.gifmaker:id/forward_icon'))
    let selectionNode = helperUtils.getNode(text('精选').id('android:id/text1'))
    return !!(selectionNode);
}

// 消息页面
const msgPage = _ => {
    let msgTextNode = helperUtils.getNode(desc('消息').clz('android.view.View'));
    let selectionNode = helperUtils.getNode(text('消息').id('android:id/text1'));
    return !!(msgTextNode && selectionNode && selectionNode.selected);
}

// 我页面
const mePage = _ => {
    let searchStubNode = helperUtils.getNode(desc('查找').id('com.smile.gifmaker:id/actionbar_search_stub'));
    let moreBtnNode = helperUtils.getNode(desc('更多').id('com.smile.gifmaker:id/more_btn'));
    let selectionNode = helperUtils.getNode(text('我').id('android:id/text1'));
    return !!(moreBtnNode && searchStubNode && selectionNode && selectionNode.selected);
}

/**
 * 功能: 找到当前是个人中心页面 再找关注
 * retrun 如果是我页面 并且 还找到关注 返回false 否则返回true
 */
const checkFollow = (isClick) => {
    if (!mePage()) { return false; }
    let followingTv = helperUtils.getNode(text('关注').id('com.smile.gifmaker:id/following_tv'));
    if (followingTv && isClick) {
         return followingTv.click()
    }
    return followingTv
}

// 个人中心作品页面
const workPage = _ => {
    const workNode = helperUtils.getNode(textMatch("^作品.*$").clz("android.widget.TextView"));
    const recyclerViewNode = helperUtils.getNode(id("com.smile.gifmaker:id/recycler_view"))
    const textNode = helperUtils.getNode(text('我').id('android:id/text1')); // 排除掉它
    // const tab_text = helperUtils.getNode(textMatch('.*私密.*').id('com.smile.gifmaker:id/tab_text'));
    return !!(recyclerViewNode && !textNode && workNode.selected);
}

const clickShort = isClick => {
    removeNodeFlag(0);
    let leftTitleNode = helperUtils.getNode(id('com.smile.gifmaker:id/forward_icon'));
    let plcTvBizTextNode = helperUtils.getNode(text('短剧').id('com.smile.gifmaker:id/plc_tv_biz_text'));
    if (leftTitleNode && plcTvBizTextNode && isClick) {
        return plcTvBizTextNode.click();
    }
    return !!(leftTitleNode && plcTvBizTextNode)
}
// 获取剧名
const videoName = (count) =>{
    for (let i = 0; i < 3; i++) {
        removeNodeFlag(0);
       let elementCaptionLabelNode = baogeUtils.getNode(id('com.smile.gifmaker:id/element_caption_label'))
        // if (!elementCaptionLabelNode) elementCaptionLabelNode = baogeUtils.getNode(id('com.smile.gifmaker:id/plc_tv_title')) // 获取剧名替代节点
       // let elementCaptionLabelNode = baogeUtils.getNode(id('com.smile.gifmaker:id/search_content'));
       let plcTvBizTextNode = baogeUtils.getNode(text('短剧').id('com.smile.gifmaker:id/plc_tv_biz_text'))
        // baogeUtils.logStringify(elementCaptionLabelNode)

        if (elementCaptionLabelNode && plcTvBizTextNode) {
            return elementCaptionLabelNode.text || "未知*" + count;
        }

        if (!elementCaptionLabelNode) {
            elementCaptionLabelNode = baogeUtils.getNode(id('com.smile.gifmaker:id/create_date_tv')); // 发布的时间
            if (elementCaptionLabelNode) {
                return elementCaptionLabelNode.text
            }
        }
        sleep(500);
    }
    return '';
}

// 获取剧名发布时间
const videoTime = () =>{
    for (let i = 0; i < 2; i++) {
        removeNodeFlag(0);
        let createDateTv = baogeUtils.getNode(id('com.smile.gifmaker:id/create_date_tv')) // 发布的时间
        let plcTvBizTextNode = baogeUtils.getNode(text('短剧').id('com.smile.gifmaker:id/plc_tv_biz_text')) // 短剧图标

        if (createDateTv && plcTvBizTextNode) {
            return createDateTv.text
        }
        sleep(500);
    }
    return '';
}

// 可能出现操作太快
const tryagain = _ => {
    return helperUtils.getNode(text("点击重试").id('com.smile.gifmaker:id/retry_btn'));
}

// 看视频免费观看本集
const feeEpisode = () => {
    // 找5次如果没有找到就算失败!
    for (let i = 0; i < 3; i++) {
        const nodeInfo = helperUtils.getNode(text('1%2Fclose').clz('android.widget.Image'));
        if (nodeInfo) {
            // helperUtils.showToast("K币充值页面准备关闭中..")
            const seeNode = helperUtils.getNode(text('看视频免费观看本集').clz('android.view.View'));
            seeNode && seeNode.click();
            // helperUtils.showToast("K币充值页面准备关闭完成")
            return true;
        }
        sleep(200);
    }
    return false;
}

// 感谢您支持作者弹窗页面
const kbRecharge = (screenHeight) => {
    let isRes = false; // 默认点击失败;
    const nodeInfo = helperUtils.getNode(textMatch('.*感谢您支持.*').clz('android.widget.TextView'));
    const balanceNode = helperUtils.getNode(textMatch('^账户余额.*').clz('android.widget.TextView'));
    const closeNode1 = helperUtils.getNode(id('com.smile.gifmaker:id/toolbar_close_btn')); // 右上角关闭按钮节点
    const closeNode2 = helperUtils.getNode(id('com.smile.gifmaker.miniapp:id/toolbar_close_btn')); // 右上角关闭按钮节点
    let closeNode = closeNode1 || closeNode2;

    if (nodeInfo && balanceNode && closeNode) {
        if (nodeInfo.bounds.top < screenHeight / 2){
            // helperUtils.showToast("K币充值页面准备找到")
            isRes =  clickPoint(closeNode.bounds.left,nodeInfo.bounds.top);
            // helperUtils.showToast("关闭 -> K币充值页面准备找到完成!")
        }
    }
    return isRes;
}

// 视频观看完点击关闭
const seeVideoEnd = (callback) => {
    const posterNode = helperUtils.getNode(textMatch('\\d+s后可领取奖励.*').id('com.smile.gifmaker.neo_video:id/video_countdown'));

    if (posterNode) {
        callback && callback()
        toast(posterNode.text);
        return true;
    }
    const nodeInfo = helperUtils.getNode(text('已成功领取奖励').id('com.smile.gifmaker.neo_video:id/video_countdown'));
    if(nodeInfo) {
        // toast("关闭广告")
        nodeInfo.click();
        callback && callback()
        sleep(random(1000, 2000));
        toast('关闭广告完成');
        return true
    }

    return false;
}

// 确定是否来到刷短视频页面中
const checkIsSeeVideoPage =  ()  => {
    removeNodeFlag(0);
    /*let close_btn_container = helperUtils.getNode(id('com.smile.gifmaker:id/toolbar_close_btn_container'))
    let toolbar_more_btn = helperUtils.getNode(id('com.smile.gifmaker:id/toolbar_more_btn_container'))*/
    let selectionNode = helperUtils.getNode(text('追剧').clz('android.widget.TextView'))
    let shareNode = helperUtils.getNode(text('分享').clz('android.widget.TextView'))
    if (selectionNode && shareNode) {
        return true
    } else  {
        const nodeInfo = helperUtils.getNode(text('换一换').clz('android.widget.Button'));
        if (nodeInfo) {
            baogeUtils.backs(2000,2)
        }
    }
    return false;
}

// 精选视频页面中
const selectionVidoePage = () => {
   let defaultSearchViewNode =  helperUtils.getNode(id('com.smile.gifmaker:id/nasa_featured_default_search_view'));
   let forwardCountNode = helperUtils.getNode(text('分享').id('com.smile.gifmaker:id/forward_count'));
   return !!(defaultSearchViewNode && forwardCountNode)
}

// 继续观看
const continueView = () => {
    let nodeInfo = helperUtils.getNode(text('继续观看').id('com.smile.gifmaker.neo_video:id/close_dialog_ensure_text'))
    if (nodeInfo) {
        return nodeInfo.click()
    }
    return false
}

// 匹配集数
const episodes = () => {
    // 获取到左边的返回按钮
    let nodeInfo = helperUtils.getNode(text('left').clz('android.widget.Image'));
    if (nodeInfo) {
        const pNode = nodeInfo.parent(); // 获取到左边的返回按钮 父节点
        if (pNode) {
            // node.nextSiblings()
           const sNode = pNode.nextSiblings(); // 它父节点的下一个兄弟节点的第一个
            if (sNode) { return sNode[0].text}
        }
    }
    return false;
}

// 点击进入关注列表
const handelClickFollow = () => {
    // 点击关注进入关注列表页面
    let followingTv = helperUtils.getNode(text('关注').id('com.smile.gifmaker:id/following_tv'));
    return followingTv && followingTv.click();
}

const followListFindUser = (keyword) => {
    sleep(3000);
    const nodeInfo = helperUtils.getNode(text('搜索用户昵称或备注').id('com.smile.gifmaker:id/editor'));
    if (!nodeInfo) {
        toast('未找到搜索框');
        back();
        sleep(1000);
        return false
    }

    if (!nodeInfo.inputText(keyword)) {
        // toast('输入昵称失败');
        return false
    }

    sleep(3000);
    // 获取到列表的每个节点信息
    const idNode = id('com.smile.gifmaker:id/name').visible(true).getNodeInfo(0);

    if (!idNode) {
        const cancel = helperUtils.getNode(text('取消').id('com.smile.gifmaker:id/cancel_button'));
        cancel && cancel.click()
        toast('关注列表为空 或者不存在'); return false;
    }

    // helperUtils.logStringify("idNode"+idNode)
    // helperUtils.logStringify("idNode"+idNode.length)

    for (let i = 0; i < idNode.length; i++) {
        let obj = {
            text: idNode[i].text,
            pointX: idNode[i].bounds.left,
            pointY: idNode[i].bounds.top
        }
        if (idNode[i].text.trim().includes(keyword.trim())) {
            return  clickPoint(obj.pointX + random(1,5), obj.pointY + random(1,5))
        }
    }
    return false;
}

// 这个方法做备用
const followListFindUser_ = (keyword, obj) => {
    const nodeInfo = helperUtils.getNode(id('com.smile.gifmaker:id/refresh_layout').clz('android.view.ViewGroup'));
    // helperUtils.logStringify(nodeInfo);

    if (nodeInfo) {
        // 获取列表的第一个父节点
        const sNode = nodeInfo.child(0);
        if (!sNode || sNode.id !== 'com.smile.gifmaker:id/recycler_view') {
           //  logd('找快号昵称父节点信息失败')
        }
        // 获取到所有关注列表
        const aNode = sNode.allChildren();
        if (!aNode && !aNode.length) {toast('关注列表为空'); return false; }

        // 为了程序的强健性 再多添加一个节点判断
        const sortText  = helperUtils.getNode(text('综合排序').id('com.smile.gifmaker:id/sort_view'));
        if (!sortText) {
            // toast('未找到当前是否在关注列表页面标识');
            return false;
        }

        // 获取到列表的每个节点信息
        // const idNode = id('com.smile.gifmaker:id/name').visible(true).getNodeInfo(0);

        // if (!idNode) { toast('关注列表为空 或者不存在'); return false; }
        // helperUtils.logStringify(idNode.length)

        for (let i = 0; i < idNode.length; i++) {
            let obj = {
                text: idNode[i].text,
                pointX: idNode[i].bounds.left,
                pointY: idNode[i].bounds.top
            }
            if (idNode[i].text.trim() === keyword.trim()) {return  obj}
        }

        // 如果上面没有匹配到 就要上滑一下
        // helperUtils.logStringify(obj)
        swipeToPoint(obj.screenWidht / 2,
            obj.screenHeight / 2,
            obj.screenWidht / 2 + 100,
            obj.screenHeight / 2 - 400,
            1000
        )
        return false;
    }
}

// 更新提示
const updateVersion = () => {
    const titleNode = helperUtils.getNode(text('更新提示').id('com.smile.gifmaker:id/title'))
    const positiveNode = helperUtils.getNode(text('确定').id('com.smile.gifmaker:id/positive'));
    titleNode && positiveNode && positiveNode.click();
}

// 点击下面的tabbar
const handleClickTabbar = str => {
    let selectionNode = baogeUtils.getNode(text(str).id('android:id/text1'));
    if (selectionNode) {
        sleep(1000);
        return selectionNode.click();
    }
    return false;
}

// 选集节点获取
const getGatherNode = () => {
    let nodeInfo = baogeUtils.getNode(text('kma').clz('android.webkit.WebView'));
    // baogeUtils.logStringify(nodeInfo)
   /* if (!nodeInfo && !nodeInfo.visible) { return false }
    let videNameNode = nodeInfo.child(0); // 我们要的短剧名
    let sNode = nodeInfo.child(5); // 选集节点
    baogeUtils.logStringify(videNameNode.text);
    baogeUtils.logStringify(sNode.text);
    return [videNameNode, sNode]*/
}


// 点击选集
const selectGather = (isClick) => {
    // 找到选集按钮
    const node = baogeUtils.getNode(text('选集>').clz('android.widget.TextView'))
    if (node && isClick) {
        node.click();
        sleep(3000);
        return true
    }
    return node;
}

// 获取当前已完结共多少集
const updateGather = () => {
    const gather = baogeUtils.getNode(textMatch('已完结共.*').clz('android.widget.TextView'))
    return gather && baogeUtils.matchNumber(gather.text);
}

// 获取选项卡的父节点
const getAllGatherParent = () => {
    let nodeInfo = false;
    for (let i = 0; i < 5; i++) {
        nodeInfo = baogeUtils.getNode(id('page-1')); // 默认选中第一个
        sleep(1000);
        if (nodeInfo) {return nodeInfo.parent()}
    }
    return false
}

// 青少年模式
const adolescentMode = () => {
    const nodeInfo = baogeUtils.getNode(text('我知道了').id('com.smile.gifmaker:id/positive'));
    if (nodeInfo) {
        nodeInfo.click();
        sleep(random(1000,3000));
    }
}

// 支付确认弹窗
const paymentAlert = () => {
    const nodeInfo1 = baogeUtils.getNode(text('支付宝支付').clz('android.view.View'));
    const nodeInfo2 = baogeUtils.getNode(text('微信支付').clz('android.view.View'));
    if (nodeInfo1 || nodeInfo2) {
        helperUtils.homes(); // 回到桌面
        sleep(random(1000,3000));
        baogeUtils.checkAppStatus(); // 回到快手前台
        sleep(random(1000,3000));
    }
}

module.exports = {
    paymentAlert: paymentAlert,
    homePage: homePage,
    selectionPage: selectionPage,
    msgPage: msgPage,
    mePage: mePage,
    workPage: workPage,
    // tryagain: tryagain,
    feeEpisode: feeEpisode,
    kbRecharge: kbRecharge,
    seeVideoEnd: seeVideoEnd,
    checkIsSeeVideoPage: checkIsSeeVideoPage,
    selectionVidoePage: selectionVidoePage,
    checkFollow: checkFollow,
    continueView: continueView,
    episodes: episodes,
    handelClickFollow: handelClickFollow,
    followListFindUser: followListFindUser,
    updateVersion: updateVersion,
    handleClickTabbar: handleClickTabbar,
    selectGather: selectGather,
    videoName: videoName,
    getGatherNode:getGatherNode,
    clickShort: clickShort,
    updateGather: updateGather,
    getAllGatherParent: getAllGatherParent,
    adolescentMode: adolescentMode,
    videoTime: videoTime
}
